import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd

tips = sns.load_dataset('tips')
iris = sns.load_dataset("iris")

# 散点图：总账单与小费的关系，按吸烟状态着色
'''
sns.relplot(x="total_bill", y="tip", hue="smoker", 
           style="time", data=tips, kind="scatter")
plt.title("Total Bill vs Tip")
plt.show()
'''

# 箱线图：不同日期的小费分布
'''
sns.catplot(x="day", y="tip", kind="box", 
           palette="muted", data=tips)
plt.title("Tip Distribution by Day")
plt.show()
'''

# 直方图+核密度估计：总账单分布
'''
sns.displot(tips["total_bill"], kde=True, bins=15, 
           color="teal", rug=True)  # rug显示数据点位置
plt.title("Total Bill Distribution")
plt.show()
'''

# 分组回归：按性别区分的总账单与小费回归关系
# 调整图表，确保标题完整显示
'''
sns.lmplot(x="total_bill", y="tip", hue="sex", 
           markers=["o", "x"], palette="Set1", data=tips, height=6, aspect=1)
plt.title("Tip by Gender Regression")  # 使用更简洁的标题
plt.tight_layout()  # 调整布局以确保标题完整显示
plt.show()
'''

# 鸢尾花花瓣长度的种类分布
'''
sns.violinplot(x="species", y="petal_length", 
              data=iris, inner="quartile")
plt.title("Petal Length Distribution of Different Iris Species")
plt.tight_layout()  # 调整布局以确保标题完整显示
plt.show()
'''

# 鸢尾花特征相关性热力图
'''
iris = sns.load_dataset("iris")
# 只选择数值列计算相关性矩阵
numeric_iris = iris.select_dtypes(include=['float64', 'int64'])
corr = numeric_iris.corr()  # 计算相关性矩阵
sns.heatmap(corr, annot=True, cmap="coolwarm", 
           linewidths=0.5, center=0)  # annot显示数值
plt.title("Correlation Matrix of Iris Features")
plt.tight_layout()  # 调整布局以确保标题完整显示
plt.show()
'''

'''
# 批量设置主题、上下文和调色板
sns.set_style("whitegrid")  # 可选：darkgrid、ticks等
sns.set_context("talk")  # 适配演示场景：paper→poster（尺寸递增）
sns.set_palette("bright")  # 预设调色板：deep、colorblind等

# 移除上/右坐标轴，调整图例位置
plt.figure(figsize=(10, 6))
sns.scatterplot(x="total_bill", y="tip", hue="size", data=tips)
sns.despine(top=True, right=True)  # 移除顶部和右侧坐标轴
plt.legend(title="Party Size", bbox_to_anchor=(1.05, 1), loc="upper left")
plt.tight_layout() 
plt.show()
'''

# 2×2子图布局：小费数据综合分析
fig, axes = plt.subplots(2, 2, figsize=(12, 10))
# 子图1：散点图
sns.scatterplot(x="total_bill", y="tip", ax=axes[0,0], data=tips)
# 子图2：直方图
sns.histplot(tips["tip"], kde=True, ax=axes[0,1])
# 子图3：箱线图
sns.boxplot(x="time", y="tip", ax=axes[1,0], data=tips)
# 子图4：回归图
sns.regplot(x="total_bill", y="tip", ax=axes[1,1], data=tips)
plt.suptitle("Tips Data Multi-Dimensional Analysis")
plt.tight_layout() 
plt.show()